import edu.princeton.cs.algs4.Stack;
import edu.princeton.cs.algs4.StdIn;

/***
 * 基本思路：
 * 1. 依此把字符压入栈中，数值压入vals 操作符压入ops
 * 2. 判断字符如果等于有括弧 ")" 则弹出两个vals 一个ops
 * 3. 两个vals 一个ops生成带有做括弧的表达式
 * 4. 表达式压入到vals中
 */

public class Bracket {
  public static void main(String[] args) {
    Stack<String> ops = new Stack<String>();
    Stack<String> vals = new Stack<String>();
    while (!StdIn.isEmpty()) {
      String s = StdIn.readString();
      if (s.equals("+") || s.equals("-") || s.equals("*") || s.equals("/") || s.equals("sqrt")) {
        ops.push(s);
      } else if (s.equals(")")) {
        String b = vals.pop();
        String a = vals.pop();
        vals.push("(" + a + ops.pop() + b + ")");
      } else {
        vals.push(s);
      }

    }
    System.out.println(vals.pop());
  }
}
